package jmine.tec.rpc.common.serialization.json;

import jmine.tec.json.JSON;

/**
 * Interface para estratégias de conversão entre objetos java e JSON.
 * 
 * @author lundberg
 */
public interface JSONConverterStrategy {

    /**
     * Verifica se esta estratégia é apropriada à conversão deste objeto
     * 
     * @param object object
     * @return boolean
     */
    boolean matchesJava(Object object);

    /**
     * Verifica se esta estratégia é apropriada à conversão deste JSON
     * 
     * @param json json
     * @return boolean
     */
    boolean matchesJSON(JSON json);

    /**
     * Converte o json para java
     * 
     * @param context context
     * @param json json
     * @return object
     */
    Object toJava(JSONConversionContext context, JSON json);

    /**
     * Converte o objeto para JSON
     * 
     * @param context context
     * @param object object
     * @return JSON
     */
    JSON toJSON(JSONConversionContext context, Object object);
}
